home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- from pprint import pprint
- from collections import defaultdict
-
- class ObservableMeta(type):
-
- def __new__(mcl, name, bases, cdict):
- obsprops = _[1]
- for name, prop in obsprops:
- for hidden_attr in prop.observe:
- props[hidden_attr].append(name)
-
-
- return super(ObservableMeta, mcl).__new__(mcl, name, bases, cdict)
-
-
-
- class ObservableProperty(object):
-
- def __init__(self, fget = None, fset = None, fdel = None, doc = None, observe = sentinel):
- if not all((lambda .0: for c in .0:
- callable(c))(filter(None, [
- fget,
- fset,
- fdel]))):
- raise AssertionError('%s %s %s' % (repr(fget), repr(fset), repr(fdel)))
-
- self.fget = fget
- self.fset = fset
- self.fdel = fdel
- self.__doc__ = doc
- if observe is sentinel:
- raise ValueError("'observe' keyword argument is required")
-
- if isinstance(observe, basestring):
- observe = tuple([
- observe])
-
- self.observe = observe
-
-
- def __get__(self, obj, objtype):
- return self.fget(obj)
-
-
- def __set__(self, obj, value):
- self.fset(obj, value)
-
-
- def __delete__(self, obj):
- self.fdel(obj)
-
-
- def __repr__(self):
- return '<ObservableProperty (%r)>' % self.observe
-
-
-
- def main():
- Observable = Observable
- import util.observe
-
- class foo((Observable,)):
- __metaclass__ = ObservableMeta
-
- def __init__(self):
- Observable.__init__(self)
- self._hidden = 'Hello world'
-
-
- def _wikized(self):
- return self._hidden.title().replace(' ', '')
-
-
- def transmutate(self):
- self.setnotify('_hidden', 'Observable properties sure are fun')
-
- wikiword = ObservableProperty(_wikized, observe = '_hidden')
-
- f = foo()
-
- def observer(instance, attr, old, new):
- print '%s: %s -> %s' % (attr, old, new)
-
- f.add_observer(observer, 'wikiword')
- f.transmutate()
- f.setnotify('_hidden', 'another test')
-
- if __name__ == '__main__':
- main()
-
-